﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Business.Entities;
using Business.Logic;
using UI.Desktop;

namespace UI.Web
{
    public partial class Formulario_web12 : System.Web.UI.Page
    {
        PaginaMaestra.ModoForm Modo;
        int idCurso;

        private string _Docente;
        public string Docente { get { return _Docente; } set { _Docente = value; } }

        private Curso _CursoActual;
        private CursoLogic curLog = new CursoLogic();

        public Curso CursoActual { get { return _CursoActual; } set { _CursoActual = value; } }


        #region Eventos



        protected void bntSalir_Click(object sender, EventArgs e)
        {
            Page.Response.Redirect("~/MenuDesktop.aspx");
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.Listar();
                this.tablePanel.Visible = false;
            }
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            this.Listar();
            this.tablePanel.Visible = false;
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            idCurso = (int)this.dgvCursos.SelectedDataKey.Value;
            //Page.Response.Redirect("~/CursosDesktop.aspx");
            //Session["Modo"] = PaginaMaestra.ModoFom.Baja;
            this.tablePanel.Visible = true;
            this.Modo = PaginaMaestra.ModoForm.Baja;
            CursoActual = curLog.GetOne(idCurso);
            MapearDeDatos();
            GuardarCambios();
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            idCurso = (int)this.dgvCursos.SelectedDataKey.Value;
            //Page.Response.Redirect("~/CursosDesktop.aspx");
            //Session["Modo"] = PaginaMaestra.ModoFom.Consulta;
            this.tablePanel.Visible = true;
            this.Modo = PaginaMaestra.ModoForm.Consulta;
            CursoActual = curLog.GetOne(idCurso);
            MapearDeDatos();
            GuardarCambios();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            //Page.Response.Redirect("~/CursosDesktop.aspx");
            //Session["Modo"] = PaginaMaestra.ModoFom.Alta;
            this.tablePanel.Visible = true;
            this.Modo = PaginaMaestra.ModoForm.Alta;
            GuardarCambios();
        }

        #endregion

        public void MapearDeDatos()
        { 
        CursoLogic log = new CursoLogic();
            if (this.Modo == PaginaMaestra.ModoForm.Alta || this.Modo == PaginaMaestra.ModoForm.Modificacion)
            {             
                this.dlEspecialidad.DataSource = log.GetEspecialidad();
                if (this.Modo == PaginaMaestra.ModoForm.Modificacion)
                {
                    txtID.Text = CursoActual.ID.ToString();
                    this.txtCupo.Text = CursoActual.Cupo.ToString();
                    this.txtAnio.Text = CursoActual.AnioCalendario.ToString();
                    this.dlEspecialidad.Text = log.GetDescripEspecialidad(CursoActual.ID);
                    this.dlPlan.Text = log.GetDescripPlan(CursoActual.ID); ;
                    this.dlMateria.Text = log.GetDescripMateria(CursoActual.ID);
                    this.dlComision.Text = log.GetDescripComision(CursoActual.ID);
                }
            }
            else
            {
                this.txtID.Text = CursoActual.ID.ToString();
                txtID.ReadOnly = true;
                this.txtCupo.Text = CursoActual.Cupo.ToString();
                txtCupo.ReadOnly = true;
                this.txtAnio.Text = CursoActual.AnioCalendario.ToString();
                txtAnio.ReadOnly = true;
                this.dlEspecialidad.Text = log.GetDescripEspecialidad(CursoActual.ID);
                dlEspecialidad.Enabled = false;
                this.dlPlan.Text = log.GetDescripPlan(CursoActual.ID); ;
                dlPlan.Enabled = false;
                this.dlMateria.Text = log.GetDescripMateria(CursoActual.ID);
                dlMateria.Enabled = false;
                this.dlComision.Text= log.GetDescripComision(CursoActual.ID);
                dlComision.Enabled = false;
                btnOkPlan.Enabled = false;
                btnOkEspecialidad.Enabled = false;
            }
            switch (this.Modo)
            { 
                case PaginaMaestra.ModoForm.Alta:
                    btnAceptar.Text = "Aceptar";
                    break;
                case PaginaMaestra.ModoForm.Baja:
                    btnAceptar.Text = "Eliminar";
                    break;
                case PaginaMaestra.ModoForm.Consulta:
                    btnAceptar.Text = "Aceptar";
                    break;
                case PaginaMaestra.ModoForm.Modificacion:
                    btnAceptar.Text = "Guardar cambios";
                    break;
            }
        }

        private void Listar()
        {
            CursoLogic curLog = new CursoLogic();
            this.dgvCursos.DataSource = curLog.GetAll();
            this.dgvCursos.DataBind();
        }

        protected void GuardarCambios()
        {
            try
            {
                CursoLogic log = new CursoLogic();
                if (this.Modo != PaginaMaestra.ModoForm.Baja)
                {
                    log.Save(CursoActual);
                    if (this.Modo == PaginaMaestra.ModoForm.Alta)
                        log.AsignarDocente(Docente, CursoActual);
                }
                else
                    log.Delete(CursoActual);
            }
            catch (Exception ex)
            {
                Page.Response.Write(ex.Message);
            }
        }

        protected bool Validar()
        {
            ValidacionesEspeciales val = new ValidacionesEspeciales();
            string mensaje = "";
            if (txtAnio.Text == "")
                mensaje += "- Debe completar el campo Año" + "\n";
            if (txtCupo.Text == "")
                mensaje += "- Debe completar el campo Cupo" + "\n";

            if (this.dlComision.Text == "")
                mensaje += "- Debe elegir una comisión\n";
            if (this.dlEspecialidad.Text == "")
                mensaje += "- Debe elegir una especialidad\n";
            if (this.dlMateria.Text == "")
                mensaje += "- Debe elegir una especialidad\n";
            if (this.dlPlan.Text == "")
                mensaje += "- Debe elegir un plan";
            if (this.dlDocente.Text == "")
                mensaje += "- Debe elegir un docente";

            if (mensaje == "")
                return true;
            else
            {
                Page.Response.Write(mensaje);
                return false;
            }
        }

        protected void MapearADatos()
        {
            try
            {
                switch (Modo)
                {
                    case PaginaMaestra.ModoForm.Alta:
                        CursoLogic curLog = new CursoLogic();
                        Curso curAct = new Curso();
                        curAct.IDMateria = curLog.GetIdMateria(dlMateria.SelectedValue.ToString());
                        curAct.IDComision = curLog.GetIdComision(dlComision.SelectedValue.ToString());
                        curAct.Cupo = int.Parse(txtCupo.Text);
                        curAct.AnioCalendario = int.Parse(txtAnio.Text);
                        curAct.State = Curso.States.New;
                        CursoActual = curAct;
                        string DocenteAct = dlDocente.SelectedValue.ToString();
                        string[] split = DocenteAct.Split(new char[] { ' ', '-' });
                        Docente = split[0];
                        break;
                    case PaginaMaestra.ModoForm.Baja:
                        CursoActual.ID = int.Parse(txtID.Text);
                        CursoActual.State = Curso.States.Deleted;
                        break;
                    case PaginaMaestra.ModoForm.Consulta:
                        CursoActual.State = Curso.States.Unmodified;
                        break;
                    case PaginaMaestra.ModoForm.Modificacion:
                        CursoLogic log = new CursoLogic();
                        CursoActual.IDMateria = log.GetIdMateria(dlMateria.SelectedValue.ToString());//ACA ESTA EL ERROR
                        CursoActual.IDComision = log.GetIdComision(dlComision.SelectedValue.ToString());
                        CursoActual.Cupo = int.Parse(txtCupo.Text);
                        CursoActual.AnioCalendario = int.Parse(txtAnio.Text);
                        CursoActual.State = Curso.States.Modified;
                        break;
                }
            }
            catch (Exception e)
            {
                Page.Response.Write(e.Message);
            }
        }

        protected void btnOkEspecialidad_Click(object sender, EventArgs e)
        {
            CursoLogic log = new CursoLogic();
            int id_esp = log.GetIdEsp(dlEspecialidad.SelectedValue.ToString());
            this.dlPlan.DataSource = log.GetPlan(id_esp);
        }

        protected void btnOkPlan_Click(object sender, EventArgs e)
        {
            CursoLogic log = new CursoLogic();
            int id_plan = log.GetIdPlan(dlPlan.SelectedValue.ToString());
            this.dlComision.DataSource = log.GetComision(id_plan);
            this.dlMateria.DataSource = log.GetMateria(id_plan);
            this.dlDocente.DataSource = log.GetDocentes(id_plan);
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.Modo != PaginaMaestra.ModoForm.Consulta)
            {
                if (Validar() != false)
                {
                    MapearADatos();
                    GuardarCambios();
                    switch (Modo)
                    {
                        case PaginaMaestra.ModoForm.Alta:
                            Page.Response.Write("El curso fue registrado correctamente");
                            break;
                        case PaginaMaestra.ModoForm.Modificacion:
                            Page.Response.Write("El curso fue modificado correctamente");
                            break;
                        case PaginaMaestra.ModoForm.Baja:
                            Page.Response.Write("El curso fue eliminado correctamente");
                            break;
                    }
                    this.btnSalir.Text = "Cerrar";
                }
            }
            else
            {
                MapearDeDatos();
            }
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Page.Response.Redirect("~/MenuDesktop.aspx");
        }

        protected void dgvCursos_SelectedIndexChanged(object sender, EventArgs e)
        {
            idCurso = (int)this.dgvCursos.SelectedDataKey.Value;
        }

    }
}
